home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / dshell / dsh333bs.lzh / bgputcut.s next >
Text File  |  1999-12-05  |  2KB  |  149 lines

  1. *
  2. *    dshell    v3
  3. *
  4. *    int bgPutCut(CUT *cut, ushort color0, ushort color2);
  5. *
  6.         .include    doscall.mac
  7.  
  8.         .xdef    _bgPutCut
  9.  
  10.         .offset    0
  11. pat:        .ds.l    1
  12. fname:        .ds.l    1
  13. x:        .ds.w    1
  14. y:        .ds.w    1
  15. type:        .ds.b    1
  16. flag:        .ds.b    1
  17.  
  18.         .offset    4
  19. cut:        .ds.l    1
  20.         .ds.w    1
  21. color:        .ds.w    1
  22. *
  23.         .text
  24.         .even
  25. D    equ    (1024-768)*2
  26. _bgPutCut:
  27. SAVREGS        reg    d3-d7/a3-a4
  28. SAVSIZ        set    (5+2)*4
  29.         movem.l    SAVREGS,-(sp)
  30.         movea.l    cut+SAVSIZ(sp),a0
  31.         move.w    x(a0),d2
  32.         move.w    #768,d3
  33.         sub.w    d2,d3
  34.         bcs    error
  35.         move.w    color+SAVSIZ(sp),d4
  36.         pea.l    bgPutCut(pc)
  37.         DOS    _SUPER_JSR
  38.         addq.l    #4,sp
  39.         moveq.l    #0,d0
  40. retn:        movem.l    (sp)+,SAVREGS
  41.         rts
  42. error:        moveq.l    #-1,d0
  43.         bra    retn
  44.  
  45.         .offset    0
  46.  
  47.  
  48. SIZEofWORK:
  49. *
  50.         .text
  51.         .even
  52. bgPutCut:
  53.         moveq.l    #1,d6
  54.         swap.w    d6
  55.         move.w    #512-32,d6
  56.         move.w    y(a0),d7    *>0 を仮定
  57.         cmp.w    d6,d7
  58.         bcs    0f
  59.         move.w    d6,d7
  60. 0:        sub.w    d7,d6
  61.         swap.w    d6
  62.         subq.w    #1,d7
  63.  
  64.         moveq.l    #8-1,d0
  65.         and.w    d2,d0
  66.         subq.w    #1,d0
  67.         move.w    d0,a4
  68.         lsr.w    #3,d2
  69.         subq.w    #1,d2
  70.  
  71.         moveq.l    #8-1,d0
  72.         and.w    d3,d0
  73.         add.w    d0,d0
  74.         lea.l    xDupNext(pc),a3
  75.         suba.w    d0,a3
  76.         lsr.w    #3,d3
  77.  
  78.         movea.l    pat(a0),a0
  79.         lea.l    $c00000+(1024*2*16),a1
  80. yLoopS:        addq.l    #4,a0
  81. yLoop:        movea.l    a1,a2
  82.         move.w    d2,d5
  83.         bmi    1f
  84. xLoop0:        moveq.l    #0,d1
  85.         move.b    (a0)+,d0
  86.         bmi    0f
  87.         move.w    d4,d1
  88. 0:        move.w    d1,(a1)+
  89.     .rept    7
  90.         moveq.l    #0,d1
  91.         add.b    d0,d0
  92.         bmi    0f
  93.         move.w    d4,d1
  94. 0:        move.w    d1,(a1)+
  95.     .endm
  96. xNext0:        dbra    d5,xLoop0
  97.  
  98. 1:        move.w    a4,d5
  99.         bmi    1f
  100.         move.b    (a0)+,d0
  101. xLoop1:        moveq.l    #0,d1
  102.         add.b    d0,d0
  103.         bcs    0f
  104.         move.w    d4,d1
  105. 0:        move.w    d1,(a1)+
  106. xNext1:        dbra    d5,xLoop1
  107.  
  108. 1:        move.w    d3,d5
  109.         jmp    (a3)
  110. xDupLoop:
  111.     .rept    8
  112.         move.w    (a2)+,(a1)+
  113.     .endm
  114. xDupNext:    dbra    d5,xDupLoop
  115.         lea.l    D(a1),a1
  116.         rol.w    #1,d6
  117.         dbcs    d7,yLoop
  118.         dbcc    d7,yLoopS
  119.  
  120.         lea.l    $c00000+(1024*2*16),a2
  121.         swap.w    d6
  122.         bra    hDupNext
  123. TEMPREGS    reg    d0-d5/a0/a3
  124. hDupLoop0:    moveq.l    #6-1,d7
  125. hDupLoop1:    movem.l    (a2)+,TEMPREGS
  126.         movem.l    TEMPREGS,0*32(a1)
  127.         movem.l    (a2)+,TEMPREGS
  128.         movem.l    TEMPREGS,1*32(a1)
  129.         movem.l    (a2)+,TEMPREGS
  130.         movem.l    TEMPREGS,2*32(a1)
  131.         movem.l    (a2)+,TEMPREGS
  132.         movem.l    TEMPREGS,3*32(a1)
  133.         movem.l    (a2)+,TEMPREGS
  134.         movem.l    TEMPREGS,4*32(a1)
  135.         movem.l    (a2)+,TEMPREGS
  136.         movem.l    TEMPREGS,5*32(a1)
  137.         movem.l    (a2)+,TEMPREGS
  138.         movem.l    TEMPREGS,6*32(a1)
  139.         movem.l    (a2)+,TEMPREGS
  140.         movem.l    TEMPREGS,7*32(a1)
  141.         lea.l    8*32(a1),a1
  142.         dbra    d7,hDupLoop1
  143.         lea.l    D(a2),a2
  144.         lea.l    D(a1),a1
  145. hDupNext:    dbra    d6,hDupLoop0
  146.         rts
  147.  
  148.         .end
  149.